home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / g_man / cat3 / OpenGL-ftn / fglinstrumentssgix.z / fglinstrumentssgix
Text File  |  1998-10-20  |  32KB  |  397 lines

  1.  
  2.  
  3.  
  4. ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))         OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee         ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX,,,, ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,,,,
  10.      ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,,,, ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,,,, ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,,,,
  11.      ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX - take measurements from enabled instruments in the
  12.      GL
  13.  
  14.  
  15. FFFFOOOORRRRTTTTRRRRAAAANNNN SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  16.      SUBROUTINE ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX( INTEGER*4 _s_i_z_e,
  17.                                           CHARACTER*8 _b_u_f_f_e_r )
  18.  
  19.  
  20. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  21.      _s_i_z_e      specifies the number of GLints in _b_u_f_f_e_r
  22.  
  23.      _b_u_f_f_e_r    specifies a pointer to the buffer for instrument measurement
  24.                records
  25.  
  26. FFFFOOOORRRRTTTTRRRRAAAANNNN SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  27.      SUBROUTINE ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( )
  28.  
  29.  
  30. FFFFOOOORRRRTTTTRRRRAAAANNNN SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  31.      SUBROUTINE ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( INTEGER*4 _m_a_r_k_e_r )
  32.  
  33.  
  34. FFFFOOOORRRRTTTTRRRRAAAANNNN SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  35.      SUBROUTINE ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( INTEGER*4 _m_a_r_k_e_r )
  36.  
  37.  
  38. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  39.      _m_a_r_k_e_r
  40.           specifies a marker value to be returned along with the measurement
  41.           record
  42.  
  43. FFFFOOOORRRRTTTTRRRRAAAANNNN SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  44.      INTEGER*4 ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( CHARACTER*8 _m_a_r_k_e_r__p )
  45.  
  46.  
  47. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  48.      _m_a_r_k_e_r__p
  49.           specifies a pointer to the location where the marker sent with a
  50.           measurement will be written after the measurement record is written
  51.           to the instrument buffer
  52.  
  53. FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNN RRRREEEETTTTUUUURRRRNNNN
  54.      Returns:
  55.  
  56.      0   when no new measurement has been written to the buffer since the last
  57.          call to ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))         OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee         ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  71.  
  72.  
  73.  
  74.      1   when a new measurement has been written to the instrument buffer
  75.          since the last such call
  76.  
  77.      -1  when a buffer overflow has been detected
  78.  
  79. FFFFOOOORRRRTTTTRRRRAAAANNNN SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  80.      INTEGER*4 ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( )
  81.  
  82.  
  83. FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNN RRRREEEETTTTUUUURRRRNNNN
  84.      Returns the number of GLints that have been written to the instrument
  85.      buffer since the last buffer reset or call to ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.
  86.  
  87. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  88.      ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX, ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  89.      ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  90.      and ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX are part of the GGGGLLLL____SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss extension.
  91.  
  92.      Instruments allow an application to measure performance of the GL
  93.      pipeline and identify possible bottlenecks. This information may be
  94.      useful in feedback-based load management schemes which attempt to
  95.      maintain a constant frame-rate, or in tuning an application for best
  96.      performance.
  97.  
  98.      GGGGLLLL____SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss provides an instrumentation framework, but no
  99.      instruments.  The set of available instruments varies between OpenGL
  100.      implementations, and can be determined by querying the GGGGLLLL____EEEEXXXXTTTTEEEENNNNSSSSIIIIOOOONNNNSSSS
  101.      string returned by ffffggggllllGGGGeeeettttSSSSttttrrrriiiinnnngggg for the names of the extensions that
  102.      implement the instruments.
  103.  
  104.      Unlike feedback and selection (see ffffggggllllSSSSeeeelllleeeeccccttttBBBBuuuuffffffffeeeerrrr and
  105.      ffffggggllllFFFFeeeeeeeeddddbbbbaaaacccckkkkBBBBuuuuffffffffeeeerrrr), GGGGLLLL____SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss provides commands that allow
  106.      measurements to be delivered asynchronously, so that the graphics
  107.      pipeline need not be stalled while measurements are returned to the
  108.      client.
  109.  
  110.      A buffer in which to collect instrument measurements is specified with
  111.      ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX.  _s_i_z_e specifies the size of the buffer, as a
  112.      count of GLints.  The buffer will be prepared in a way that allows it to
  113.      be written asynchronously by the graphics pipeline.  If the same _b_u_f_f_e_r
  114.      was specified on a previous call, the buffer is reset; that is,
  115.      measurements taken after the call to ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX will be
  116.      written to the start of the buffer.  If _b_u_f_f_e_r is zero, then any
  117.      resources allocated by a previous call to prepare the buffer for writing
  118.      will be freed.  If _b_u_f_f_e_r is non-zero, but is different from a previous
  119.      call, the old buffer is replaced by the new buffer and any allocated
  120.      resources involved in preparing the old buffer for writing are freed.
  121.  
  122.      The buffer address can be queried with ffffggggllllGGGGeeeettttPPPPooooiiiinnnntttteeeerrrrvvvvEEEEXXXXTTTT using argument
  123.      GGGGLLLL____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT____BBBBUUUUFFFFFFFFEEEERRRR____PPPPOOOOIIIINNNNTTTTEEEERRRR____SSSSGGGGIIIIXXXX.
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))         OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee         ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  137.  
  138.  
  139.  
  140.      To enable an instrument, use ffffggggllllEEEEnnnnaaaabbbblllleeee with an argument that specifies
  141.      the instrument.  The argument to use for a particular instrument is
  142.      determined by the OpenGL extension that supports that instrument.  (See
  143.      below for an example.)
  144.  
  145.      To start the currently-enabled instrument(s) call
  146.      ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  To take a measurement use
  147.      ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  To stop the currently-enabled instruments and
  148.      take a final measurement use ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  The parameter
  149.      _m_a_r_k_e_r will be passed through the pipe and written to the buffer to ease
  150.      the task of interpreting it.
  151.  
  152.      The format of any instrument measurement in the buffer obeys certain
  153.      conventions. The first word of the measurement is the ffffggggllllEEEEnnnnaaaabbbblllleeee enum for
  154.      the instrument itself. The second word of the measurement is the size in
  155.      GLints of the entire measurement so that any parser can step over
  156.      measurements with which it is unfamiliar.  Currently there are no
  157.      implementation independent instruments to describe. Some implementation
  158.      dependent instruments are described in the Machine Dependencies section
  159.      of this page.
  160.  
  161.      In a single measurement, if multiple instruments are enabled, the data
  162.      for those instruments can appear in the buffer in any order.
  163.  
  164.      If no instruments are enabled executing ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  165.      ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, or ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssss will not write measurements
  166.      to the buffer.
  167.  
  168.      The number of measurements taken since the buffer was reset can be
  169.      queried with ffffggggllllGGGGeeeetttt using GGGGLLLL____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT____MMMMEEEEAAAASSSSUUUURRRREEEEMMMMEEEENNNNTTTTSSSS____SSSSGGGGIIIIXXXX.
  170.  
  171.      To determine whether a measurement has been written to the buffer call
  172.      ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  If a new measurement has appeared in the buffer
  173.      since the last call to ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, 1 is returned, and the
  174.      value of marker associated with the measurement by ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  175.      or ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX is written into the variable referenced by
  176.      _m_a_r_k_e_r__p. The measurements will appear in the buffer in the order in
  177.      which they were requested. If the buffer overflows,
  178.      ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX may return -1 as soon as the overflow is detected,
  179.      even if the measurement being polled did not cause the overflow. (An
  180.      implementation may also choose to delay reporting the overflow until the
  181.      measurement that caused the overflow is the one being polled.)  If no new
  182.      measurement has been written to the buffer, and overflow has not
  183.      occurred, ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX returns 0.
  184.  
  185.      To get a count of the number of new valid GLints written to the buffer,
  186.      call ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX. The value returned is the number of GLints
  187.      that have been written to the buffer since the last call to
  188.      ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX.  If the buffer has
  189.      overflowed since the last call to ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, -1 is returned
  190.      for the count.  Note that ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX can be used independently
  191.      of ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))         OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee         ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  203.  
  204.  
  205.  
  206. EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS
  207.           #ifdef GL_SGIX_instruments
  208.           #define MARKER1 1001
  209.           #define MARKER2 1002
  210.           {
  211.              static GLint buffer[64];
  212.              GLvoid *bufp;
  213.              int id, count0, count1, r;
  214.  
  215.              /* define the buffer to hold the measurements */
  216.              glInstrumentsBufferSGIX(sizeof(buffer)/sizeof(GLint), buffer);
  217.  
  218.              /* enable the instruments from which one wishes to take measurements */
  219.              glEnable(<an enum for a supported instrument, such as GL_IR_INSTRUMENT1_SGIX>);
  220.  
  221.              glStartInstrumentsSGIX();
  222.              /* insert GL commands here */
  223.              glReadInstrumentsSGIX(MARKER1);
  224.              /* insert GL commands here */
  225.              glStopInstrumentsSGIX(MARKER2);
  226.  
  227.              /* query the number of measurements since the buffer was specified */
  228.              glGetIntegerv(GL_INSTRUMENT_MEASUREMENTS_SGIX,&r);
  229.                  /* now r should equal 2 */
  230.  
  231.              /* query the pointer to the instrument buffer */
  232.              glGetPointervEXT(GL_INSTRUMENT_BUFFER_SGIX,&bufp);
  233.                  /* now bufp should be equal to buffer */
  234.  
  235.              /*
  236.               * we can do a GetInstrumentsSGIX before or after the calls to
  237.               * PollInstrumentsSGIX but to be sure of exactly what
  238.               * measurements are in the buffer, we can use PollInstrumentsSGIX.
  239.               */
  240.              count0 = glGetInstrumentsSGIX();
  241.              /* Since 0, 1, or 2 measurements might have been returned to
  242.               * the buffer at this point, count0 will be 0, 1, or 2 times
  243.               * the size in GLints of the records returned from the
  244.               * currently-enabled instruments.
  245.               * If the buffer overflowed, count0 will be -1.
  246.               */
  247.  
  248.              while (!(r = glPollInstrumentsSGIX(&id))) ;
  249.              /* if r is -1, we have overflowed.  If it is 1, id will
  250.               * have the value of the marker passed in with the first
  251.               * measurement request (should be MARKER1).  While it is 0,
  252.               * no measurement has been returned (yet).
  253.               */
  254.  
  255.              while (!(r = glPollInstrumentsSGIX(&id))) ;
  256.              /* see the note on the first poll; id now should equal MARKER2 */
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))         OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee         ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  269.  
  270.  
  271.  
  272.              count1 = glGetInstrumentsSGIX();
  273.              /* the sum of count0 and count1 should be 2 times the size in GLints
  274.               * of the records returned for all instruments that we have enabled.
  275.               */
  276.           }
  277.           #endif
  278.  
  279.  
  280. NNNNOOOOTTTTEEEESSSS
  281.      ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX, ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  282.      ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  283.      and ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX are part of the GGGGLLLL____SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss extension,
  284.      not part of the core GL command set.  See ffffggggllllIIIInnnnttttrrrroooo for information about
  285.      using extensions.
  286.  
  287. EEEERRRRRRRROOOORRRRSSSS
  288.      If _s_i_z_e is negative, GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____VVVVAAAALLLLUUUUEEEE is generated.
  289.  
  290.      GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN is generated if ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX is executed
  291.      twice without an intervening execution of ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or
  292.      ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX. Symmetrically, GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN is
  293.      generated if ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX is executed twice without an
  294.      intervening ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX will
  295.      generate GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN if executed after an execution of
  296.      ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssss without an intervening execution of
  297.      ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX.  Executing any of
  298.      ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, or ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssss
  299.      without a successful execution of ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX to define a
  300.      buffer will generate GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN.
  301.  
  302.      GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN is generated if any of ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX,
  303.      ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  304.      ffffggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ffffggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX is executed between the
  305.      execution of ffffggggllllBBBBeeeeggggiiiinnnn and the corresponding execution of ffffggggllllEEEEnnnndddd.
  306.  
  307. AAAASSSSSSSSOOOOCCCCIIIIAAAATTTTEEEEDDDD GGGGEEEETTTTSSSS
  308.      ffffggggllllGGGGeeeetttt with argument GGGGLLLL____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT____MMMMEEEEAAAASSSSUUUURRRREEEEMMMMEEEENNNNTTTTSSSS____SSSSGGGGIIIIXXXX
  309.      ffffggggllllGGGGeeeettttPPPPooooiiiinnnntttteeeerrrrvvvv with argument GGGGLLLL____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT____BBBBUUUUFFFFFFFFEEEERRRR____PPPPOOOOIIIINNNNTTTTEEEERRRR____SSSSGGGGIIIIXXXX
  310.      ffffggggllllGGGGeeeettttSSSSttttrrrriiiinnnngggg with argument GGGGLLLL____EEEEXXXXTTTTEEEENNNNSSSSIIIIOOOONNNNSSSS
  311.  
  312.  
  313. MMMMAAAACCCCHHHHIIIINNNNEEEE DDDDEEEEPPPPEEEENNNNDDDDEEEENNNNCCCCIIIIEEEESSSS
  314.      The SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss extension is supported only on InfiniteReality
  315.      systems.
  316.  
  317.      The GGGGLLLL____IIIIRRRR____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT1111____SSSSGGGGIIIIXXXX instrument is implemented only on
  318.      InfiniteReality systems.  Each measurement uses 10 words of the buffer.
  319.      The first (index 0) will be GGGGLLLL____IIIIRRRR____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT1111____SSSSGGGGIIIIXXXX itself. The second
  320.      word (index 1) will be 10.  The following words are:
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))         OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee         ffffggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  335.  
  336.  
  337.  
  338.           COUNTEMPTY (index 2) Increments each clock cycle for which a word of
  339.           screen-space geometry, pixel, or texel data was not transferred from
  340.           the GE board to the RM board.  A high value could indicate that
  341.           rendering is geometry-limited or host-limited (because the GE is not
  342.           delivering commands to the RM as fast as the RM can process them),
  343.           or that rendering is rasterization-limited (because the RM is
  344.           working on previous commands and is refusing to accept new data from
  345.           the GE).  Unfortunately there is no simple way to distinguish
  346.           between these two cases.  The counter is set to zero by
  347.           ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, and by ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX after its
  348.           value has been written to the buffer.
  349.  
  350.           COUNTDRAW (index 3) Increments each clock cycle for which a word of
  351.           screen-space geometry or pixel data (but not texel data) is
  352.           transferred from the GE board to the RM board.  The counter is set
  353.           to zero by ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, and by ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  354.           after its value has been written to the buffer.
  355.  
  356.           COUNTLOAD (index 4) Increments each clock cycle for which a word of
  357.           texture data is written to the texture memory.  The counter is set
  358.           to zero by ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, and by ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  359.           after its value has been written to the buffer.
  360.  
  361.           MAILBOX_TIMESTAMP (index 5) Contains the value of COUNTALL (see
  362.           below) at the time ffffggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  363.           was called.
  364.  
  365.           COUNTALL (index 6) Increments every clock cycle. No effort is made
  366.           to prevent wrapping.
  367.  
  368.           PAD (index 7) Unused.
  369.  
  370.           MARKER (index 8) Holds the value of the marker passed to
  371.           ffffggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ffffggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX for this
  372.           measurement.
  373.  
  374.           MAILBOX (index 9) Holds a value that is used by the implementation.
  375.           Typically a sequence identifier, set after the buffer has been
  376.           specified, starting at 1 with the first measurement and incrementing
  377.           by 1 for each successive measurement.
  378.  
  379.  
  380. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  381.      ffffggggllllFFFFlllluuuusssshhhhRRRRaaaasssstttteeeerrrrSSSSGGGGIIIIXXXX, ffffggggllllEEEEnnnnaaaabbbblllleeee
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.